#pragma once
#include <string>
#include <vector>
#include <Poco\File.h>
#include <Poco\DateTime.h>
namespace Poco {
	class File;
	class Path;
	class Logger;
	namespace Util {
		class Application;
		class LayeredConfiguration;
	}
}
struct FSplitterInfo {
	size_t beginPos;
	size_t endPos;
	time_t lastModify;
	std::string filepath;
};
class Cryptoer;
class Util
{
public:
	Util();
	~Util();
	static void init(Poco::Util::Application& app,Cryptoer *pcryptoer);
	static std::string readContents(const Poco::File& file);
	static std::string readDirContents(const Poco::File&file,std::vector<FSplitterInfo>& infos);
	static std::string readContents(const std::string& fname);
	static void writeContents(const Poco::File& file, const std::string& contents);
	static void writeContents(const std::string& fname, const std::string& contents);
	static std::string getSrcsFileName(const std::string &fn);
	static std::string getSrcFileName(const std::string &fn);
	static Poco::File getSrcsFile(const std::string &fn);
	static Poco::File getSrcFile(const std::string &fn);
	static Poco::File getSrcsFile(const Poco::File &f);
	static Poco::File getSrcFile(const Poco::File &f);
	static Poco::Path getBackupPath();
	static Cryptoer * getCurrentCryptoer();
	static void listDirFiles(const std::string &path, std::vector<Poco::File> &files);
	static void listDirs(const std::string &path, std::vector<Poco::File> &files);
	static void listDirs(const std::string &path, std::vector<Poco::Path> &files);
	static void listDirWithFiles(const std::string &path, std::vector<Poco::File>&files);
	static Poco::Path getRelativePath(Poco::Path &base, Poco::Path& absolute);
private:
	static Poco::Util::Application *_app;
	static Poco::Logger *_logger;
	static Poco::Util::LayeredConfiguration *_config;
	static std::string& _srcPathName;
	static std::string& _srcsPathName;
	static Poco::Path& _srcPath;
	static Poco::Path& _srcsPath;
	static Cryptoer * _cryptoer;
};

